package lottery

import (
	"lottery/models"
	"time"
)

// 接口
type ILottery interface {
	Platform() int                                                  // 平台ID
	Login() *models.ActionResp                                      // 登录
	ReLogin() *models.ActionResp                                    // 重新登录
	AgentInfo() *models.Agent                                       // 获取代理信息
	GetOrderInfo(time.Time) (string, error)                         //获取指定日期的订单数据
	Tick(int, *models.GameData) (float64, interface{}, bool, error) // 点水 返回新水位，点水data，是否丢弃，错误信息
	// price team gameData
	Place(int, int, interface{}, *models.GameData, bool) *models.ActionResp // 下单 team 1 主场  2 客场
	CheckLogin() *models.ActionResp                                         // 监测登录
	Run()                                                                   // 更新数据
	IsStop() bool                                                           // 是否已经停止
	GetGames() <-chan []*models.Game                                        // 获取当前赛事
	GetGameData() <-chan []*models.GameData                                 // 获取实时数据
	Destroy()                                                               // 销毁
}

type IFactory interface {
	New(*models.Agent) ILottery
	Platform() int
}

var (
	_FACTORY = make(map[int]IFactory)
)

// 实现之后记得自己注册
func Register(ifactory IFactory) {
	_FACTORY[ifactory.Platform()] = ifactory
}

// 获取lottery客户端
func GetLottery(agent *models.Agent) (ILottery, bool) {
	factory, ok := _FACTORY[agent.PlatformId]
	if !ok {
		return nil, ok
	}

	return factory.New(agent), ok
}
